home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Resource Library: Multimedia
/
Resource Library: Multimedia.iso
/
hypercrd
/
xcmds
/
rtf-redr.hqx
/
RTFToField.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-19
|
3KB
|
147 lines
/*
* This software is copyright 1992 by Robert Morris.
* You may freely redistribute this software as shareware
* if you do so in the same form as you got it. If you find
* this software useful, please send $12 to:
* Robert Morris
* P.O. Box 1044
* Harvard Square Station
* Cambridge, MA 02238
* ecognome@aol.com
* If you incorporate any of this software in any kind of
* commercial product, please send $2 per copy distributed
* to the above address.
*/
/*
* RTFToField(rtf-text, cardflag, fieldname)
*/
#include <HyperXCmd.h>
#include <stdlib.h>
#include <ctype.h>
#include "SetUpA4.h"
#include <string.h>
#include "lists.h"
#include "rtf.h"
XCmdPtr xptr;
void error(char *);
int goterror;
Handle HStr(char *);
pascal void
main(paramPtr)
XCmdPtr paramPtr;
{
int i;
TEHandle teh;
char fieldname[256];
Boolean cardFld;
TEStyleHandle sh1;
MyStyleHandle sh;
Handle txt, txt1;
struct list flds;
long start, nstart, txtlen;
OSErr err;
RememberA0();
SetUpA4();
xptr = paramPtr;
goterror = 0;
teh = 0;
sh = 0;
sh1 = 0;
txt = 0;
if(paramPtr->paramCount != 3){
error("error : usage RTFToField(rtf-text, cardflag, fieldname)\rCopyright 1992 Robert Morris.");
goto out;
}
parsertf(paramPtr->params[0], &sh, &txt);
if(goterror)
goto out;
if(strcmp(*(paramPtr->params[1]), "false") == 0)
cardFld = FALSE;
else
cardFld = TRUE;
start = 0;
txtlen = GetHandleSize(txt);
NewList(paramPtr->params[2], &flds);
while(ReadListLine(&flds, fieldname) != -1){
CtoPstr(fieldname);
teh = GetFieldTE(paramPtr, cardFld, 0, 0, (StringPtr)fieldname);
if(teh == 0 || paramPtr->result != xresSucc){
error("error : no such field");
goto out;
}
sh1 = GetStylHandle(teh);
if(sh1 == 0){
error("error : GetStylHandle() failed");
goto out;
}
nstart = start;
err = CvtMyStyleHandle(sh, &nstart, sh1, 30000L, txt);
if(err != 0){
error("error : out of memory");
goto out;
}
/* TESetText() destroys existing style information */
HLock(txt);
TESetText(*txt + start, nstart - start, teh);
HUnlock(txt);
/* so re-compute styles! */
nstart = start;
err = CvtMyStyleHandle(sh, &nstart, sh1, 30000L, txt);
SetFieldTE(paramPtr, cardFld, 0, 0, (StringPtr)fieldname, teh);
TEDispose(teh);
teh = 0;
start = nstart;
}
out:
if(sh)
DisposMyStyleHandle(sh);
if(teh)
TEDispose(teh);
if(txt)
DisposHandle(txt);
if(goterror && paramPtr->returnValue == 0)
paramPtr->returnValue = HStr("error : out of memory!");
RestoreA4();
}
Handle
HStr(str)
char *str;
{
Handle newHndl;
newHndl = (Handle) NewHandle((long) strlen(str) + 1);
if(newHndl == 0)
return(0);
strcpy((char *) (*newHndl), str);
return(newHndl);
}
void
error(s)
char *s;
{
if(goterror == 0)
xptr->returnValue = HStr(s);
goterror = 1;
}